"Perdida en la hierba" by Mel Hython

[-------------------------------------------------

COMENTARIO SOBRE LOS COMENTARIOS

Con este relato intentaré crear además un 
listado que pueda usarse como ejemplo, no
porque este relato me parezca especialmente
relevante a modo de ejemplo, si no porque 
considero que los ejemplos de uso de I7 son 
realmente necesarios en estos momentos.

Para ello seré cuidadoso con el uso de las 
secciones e intentaré ser coherente en el uso
de comentarios.

Los comentarios que usen líneas de:

==============================

representarán cabeceras de secciones muy 
diferenciadas, mientras que los que usen líneas 
de:

-------------------------------------------------

serán comentarios muy relevantes pero 
desestructurados. Finalmente los comentarios
 sin separador pero con letras mayúsculas
servirán para identificar objetos relativos al 
relato, ya sean personajes, items o localidades.

-------------------------------------------------]

[==============================

	Perdida en la hierba

	Por Mel Hython, 2008

	Este relato surgió de las historias de Layna:

	http://laynaspeedy.blogspot.com/

	Y como continuación de: 
	'Hierba tras el cristal'

	http://www.wikicaad.net/Hierba_tras_el_cristal
	
==============================]

[==============================

	Librerías y opciones

==============================]


Include Spanish by Sebastian Arg.
Include Basic Screen Effects by Emily Short.

Use full-length room descriptions.
Use no scoring.

[==============================

	Referencia bibliográfica

==============================]
The story title is "Perdida en la hierba".
The story author is "Mel Hython".
The story headline is "Sobre un viaje muy corto que se hace muy largo".
The story genre is "Ciencia Ficción".
The release number is 0.
The story description is "¿Cómo llegar a algún lugar cuando ni siquiera puedes ver dónde estás?".
The story creation year is 2008.

[==============================

	El relato

==============================]
Part 1 - Reglas generales modificadas

Chapter 1 - Utilidades o librerías integradas generales

Section 0 - Cosas comunes a usar

[--------------------------------------------------

La regla falsa. Esta regla NO debe
acabar ejecutándose NUNCA. Si lo 
hace es que hemos dejado algo 
sin completar, de esta forma
su grito agónico implica un fracaso
en la programación.

--------------------------------------------------]

This is the Ugh rule:
	say "Ugh! Uuuugh!".


Section 1 - Facilidad para mostrar partes no interactivas

[--------------------------------------------------

La idea es bien simple -ya que hay muchas cosas 
que no sé hacer-, cada entrada de una tabla/lista 
simple, se muestra y tras ella se espera la 
pulsación de una tecla

--------------------------------------------------]
To relatar fragmento en (tabla - a table-name):
	let N be the number of rows in tabla;
	repeat through tabla begin;
		decrease N by 1;
		say "[frase entry]";
		say paragraph break;
		if N is not 0, wait for any key;
	end repeat.

To relatar fragmento en (tabla - a table-name), limpiando pantalla:
	relatar fragmento en tabla;
	wait for any key;
	clear the screen.

Section 2 - Objetos que traen memoria

[--------------------------------------------------

La idea es incluir una clase nueva de objetos 
que contengan:

	- Un contador del número de veces 
	   que son examinados
	- Una tabla en la que se incluyen 
	   mensajes y/o reglas a activar
	   cuando se alcanza el contador
                   que corresponda

--------------------------------------------------]

[

CLASE: Decorado activo

Así como sus definiciones y reglas asociadas

]
A decorado activo is a kind of thing. 
A decorado activo is always scenery.
A decorado activo has a number that varies called veces examinado.
The veces examinado of a decorado activo is usually 0.
A decorado activo has a table-name called comportamiento.
The comportamiento of a decorado activo is usually Table of comportamiento por defecto de decorado activo.

[DEFINICIÓN: Una definición para saber fácilmente si hay algo que mirar
en las tablas o no]
Definition: a decorado activo (called el-decorado) is reglado if the number of filled rows in the comportamiento of el-decorado is greater than 0.

[REGLA para modificar el número de veces examinado]
After examining a decorado activo (called observado):
	increase the veces examinado of observado by 1.

[REGLA de sustitución de examinar]
Instead of examining a decorado activo (called observado):
	[Si la tabla está vacía hacer lo de siempre]
	if observado is not reglado, continue the action;
	let N be veces examinado of observado;
	increase N by 1;
	[Si hay algo en la tabla buscar el valor actual]
	if there is a regla corresponding to a vez of N in comportamiento of observado
	begin;
		[Existe, lo escogemos y ejecutamos la regla]
		choose row with a vez of N in comportamiento of observado;
		follow regla entry;
		increase the veces examinado of observado by 1;
	otherwise;
		[No hay trigger, hacer lo de siempre]
		continue the action;
	end if.

[TABLA POR DEFECTO de eventos disparados ante 
un número de examinados de un decorado activo]
Table of comportamiento por defecto de decorado activo
vez		regla
a number	a rulebook


[REGLA para coger un escenario]
Instead of taking a decorado activo (called cogido):
	say "No merece la pena ni planteárselo.";

Section 3 - Raiz cuadrada

[--------------------------------------------------

CALCULO DE LA RAIZ CUADRADA 
MEDIANTE EL MÉTODO ITERATIVO
BABILÓNICO, INTENTANDO
ACERCARSE MEDIANTE UNA TABLA

--------------------------------------------------]

Table of Near Square Root
number		root
0		0
1		1
4		2
9		3
16		4
25		5
36		6
49		7
64		8
81		9
100		10
400		20
900		30
1600		40
2500		50
3600		60
4900		70
6400		80
8100		90
10000		100
32400		180


[Función que busca en la tabla]
To decide what number is the inr [iniitial near root] of (num - a number):
	let binr be 0; [El número más cercano]
	repeat through the Table of Near Square Root
	begin;
		if number entry is greater than num
		begin;
			decide on binr;
		otherwise;
			change binr to root entry;
		end if;
	end repeat;
	decide on binr.

To decide what number is the sqr [square root] of (num - a number):
	[Aplicamos el método babilónico, primero escoger un número cercano]
	if num is 0, decide on 0;
	let bsqr be the inr of num;
	let nbsqr be num / bsqr;
	increase nbsqr by bsqr;
	change nbsqr to nbsqr divided by 2;
	[Ahora iteramos hasta que no haya casi]
	let diff be 100;
	while diff is greater than 1
	begin;
		change bsqr to nbsqr;
		change nbsqr to num / bsqr;
		increase nbsqr by bsqr;
		change nbsqr to nbsqr divided by 2;
		if bsqr is greater than nbsqr
		begin;
			change diff to (bsqr - nbsqr);
		otherwise;
			change diff to (nbsqr - bsqr);
		end if;
	end while;
	decide on bsqr.

Section 4 - Vectores y objetos con coordenadas

[--------------------------------------------------

TRATAMIENTO DE VECTORES

No vamos a definir una vector como 
una clase, así que usaremos una lista, 
una lista de números, el primero será
la coordenada X y la segunda será la Y

En este juego la distancia que 
importa es en localidades, siendo X 
el eje este-oeste y el Y el eje 
norte-sur.

--------------------------------------------------]

[Asociamos una posición a todos 
los objetos, aunque no siempre se
usará]

[Distancia eje x y eje y en localidades]
A thing have a list of number that varies called posicion. 
The posicion of a thing is usually {0, 0}.

[Mostrar vector como tal, más que nada a modo de trazado]
To say el vector de posicion de (objeto - a thing):
	say "<[entry 1 of the posicion of objeto],[entry 2 of the posicion of objeto]>".

To decide what number is the distancia of (objeto - a thing):
	let D be the module of posicion of objeto;
	change D to D divided by 3;
	decide on D.

To say la distancia de (objeto - a thing):
	say " [the module of posicion of objeto]".

[El módulo del vector]
To decide what number is the module of (vector - a list of number):
	let x be entry 1 of vector;
	let y be entry 2 of vector;
	let result be y multiplied by y;
	increase result by x multiplied by x;
	decide on the sqr of result.

[Vector de un tamaño dado en la misma dirección que otro]
To decide what list of number is the normalized (vector - a list of number) at size (tam - a number):
	let result be {0, 0};
	let x be entry 1 of vector;
	let y be entry 2 of vector;
	let mod be the module of vector;
	if mod is 0, change mod to 1;
	change x to x multiplied by tam;
	change x to x divided by mod;
	change entry 1 of result to x;
	change y to y multiplied by tam;
	change y to y divided by mod;
	change entry 2 of result to y;
	decide on result.

[Producto escalar de dos vectores]
To decide what number is the dot of (v1 - a list of number) and (v2 - a list of number):
	let result be entry 1 of v1;
	change result to result multiplied by entry 1 of v2;
	let yr be entry 2 of v1;
	change yr to yr multiplied by entry 2 of v2;
	change result to result plus yr;
	decide on result.

[Suma de vectores]
To decide what list of number is the sum of (v1 - a list of number) and (v2 - a list of number):
	let result be {0, 0};
	let x be entry 1 of v1;
	let y be entry 2 of v1;
	change x to x plus entry 1 of v2;
	change y to y plus entry 2 of v2;
	change entry 1 of result to x;
	change entry 2 of result to y;
	decide on result.

[Vector del mismo tamaño ortogonal y a la derecha.
Calcular este vector es realmente fácil, <x,y> --> <y,-x>]
To decide what list of number is the right orthogonal of (v1 - a list of number):
	let result be {0, 0};
	let y be entry 2 of v1;
	let x be entry 1 of v1;
	let negx be 0 minus x;
	change entry 1 of result to y;
	change entry 2 of result to negx;
	decide on result.
	
[Dirección general: delante, derecha, izquierda o detrás]
Orientacion is a kind of value. The orientacions are delante, derecha, izquierda and detras.

[Frases que lo expresan en un barco]
To say naval de (ori - a orientacion):
	if ori is delante, say "enfrente";
	if ori is detras, say "detras";
	if ori is derecha, say "a la derecha";
	if ori is izquierda, say "a la izquierda".

[Frases de distancia]
To say distancia aproximada (d - a number):
	if d is less than 2
	begin;
		say "muy cerca";
	otherwise;
		if d is less than 4
		begin;
			say "no muy lejos"; 
		otherwise;
			if d is less than 10
			begin;
				say "lejos";
			otherwise;
				if d is less than 15
				begin;
					say "muy lejos";
				otherwise;
					say "en el horizonte";
				end if;
			end if;
		end if;
	end if.
	
[Para calcular la dirección general se considera el vector y su ortogonal a la derecha.

Se realiza el producto escalar de la posición del objeto con el vector --> PS
Y el producto escalar con su ortogonal dercha --> PSO 

Si PS > 0 está 'por delante' y si no 'por atrás'
Si PSO > está 'por la derecha' y si no 'por la izquierda'

El mayor de los valores absolutos es el que determina. Así si ambos son positivos pero PS es mayor que PSO se dirá que está por delante y si no se dirá que está por la derecha.

]
To decide what orientacion is la direccion de (objeto - a thing) frente a (v1 - a list of number):
	let V be the posicion of objeto;
	let ov1 be the right orthogonal of v1;
	let ps be the dot of V and v1;
	let pso be the dot of V and ov1;
	if  ps is greater than 0
	begin;
	[Por delante]
		if pso is greater than 0 
		begin;
		[delante y derecha]
			if ps is greater than pso
			begin;
			[PS > PSO --> delante]
				decide on delante;
			otherwise;
			[PS < PSO --> derecha]
				decide on derecha;
			end if;
		otherwise;
		[delante e izquierda]
			let npso be 0 minus pso;
			if ps is greater than npso
			begin;
			[PS > -PSO --> delante]
				decide on delante;
			otherwise;
			[PS < -PSO --> izquierda]
				decide on izquierda;
			end if;
		end if;
	otherwise;
	[Por detrás]
		let nps be 0 minus ps;
		if pso is greater than 0 
		begin;
		[detrás y derecha]
			if nps is greater than pso
			begin;
			[-PS > PSO --> detras]
				decide on detras;
			otherwise;
			[PS < PSO --> derecha]
				decide on derecha;
			end if;
		otherwise;
		[detrás e izquierda]
			let npso be 0 minus pso;
			if nps is greater than npso
			begin;
			[-PS > -PSO --> detras]
				decide on detras;
			otherwise;
			[-PS < -PSO --> izquierda]
				decide on izquierda;
			end if;
		end if;
	end if.

Chapter 2 - Un espacio abierto

[--------------------------------------------------

En realidad no hay más que una 
localidad, pero debe parecer que hay
toda una planicie llena de hierba
en la hay objetos (locales) y también
hitos del paisaje (montañas, etc...).

Para ello hay que mantener un
sistema de coordenadas para el 
jugador y los diversos objetos 
que hay en él juego, así como 
al menos direcciones para los hitos
del paisaje.

--------------------------------------------------]

Section 1 - Posición y orientación del jugador

[--------------------------------------------------

Hay que dotas al jugador de una
posición en la planicie

--------------------------------------------------]

LocalizacionJugador is a list of number that varies.

[--------------------------------------------------

Hay que dotar al jugador de un 
vector coordenadas de orientación 
para situar los objetos e hitos 
remotos en una dirección dada

--------------------------------------------------]

OrientacionJugador is a list of number that varies.




Part  2 - Perdida en la hierba

Chapter 0 - El comienzo

[--------------------------------------------------

   Regla activada al iniciar el juego

--------------------------------------------------]
When play begins:
	poner cuadro de inicio;
	wait for any key;
   	clear the screen;
	contar inicio de la historia;
	now the description of the player is "Tego una pinta genial, aunque mi dinero me ha costado".

[FRASE: Cuadro de inicio con el nombre del relato y fecha]
To poner cuadro de inicio:
	display the boxed quotation
	"Perdida en la hierba



	Un relato de Mel Hython.
	Año 2008.";
	show the current quotation.

[FRASE: Introducción que relata el despertar de Layna]
To contar inicio de la historia:
	relatar fragmento en Table of Historia Inicial de Layna, limpiando pantalla.

[HISTORIA: El fragmento inicial]
Table of Historia Inicial de Layna
frase
"Dolor."
"Bueno, lo que ahora llamo dolor, que no es otra cosa que un montón de indicadores fluctuantes que me dicen que algo anda mal, muy mal..."
"La verdad es que tampoco es tan diferente a lo que antes llamaba dolor. Es igual de molesto, perturbador y ni siquiera he ganado gran cosa en cuanto a precisar que es lo que realmente anda mal. A fin de cuentas, cuando las cosas van realmente mal todo duele al mismo tiempo."

Lugar is a room.


